﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Business_Entity;
using Business_Logic;

namespace PetSoft.GUI.Ventas
{
    public partial class GUIBuscarMascota : Form
    {                
        private List<BEMascota> listaMascotas;
        private List<BEEspecie> listaEspecies;
    	private List<BERaza> listaRazas;
    	private List<BESexo> listaSexos;               
        private BEMascota mascotaSeleccionada;	
		private BECliente clienteSeleccionado;        
        
        private int tipoVentana = 0;
        
        public GUIBuscarMascota()
        {
        	try{
		        InitializeComponent();
		        inicializarComponentes();		        		       
        	}
        	catch(Exception e){
        		MessageBox.Show(e.ToString());
        	}
        }
        
        public GUIBuscarMascota(int tipoVentana){
			InitializeComponent();
			inicializarComponentes();		        		               	
        	this.tipoVentana = tipoVentana;
        	
        	if(tipoVentana == 1){ // búsqueda total de mascotas
        		
        	}else if(tipoVentana == 2){ // busca parejas
        		
        	}else if(tipoVentana == 3){ // adopta mascotas        		
        		BuscarClienteBTN.Enabled = false;
        		ClienteLBL.Enabled = false;
        	}
        	
        }
        
        public BEMascota MascotaSeleccionada {
			get { return mascotaSeleccionada; }
			set { mascotaSeleccionada = value; }
		}
        
        public void inicializarComponentes(){        	
        	inicializarCombos();
        	fechaIniDTP.MaxDate = DateTime.Today;
        	fechaFinDTP.MaxDate = DateTime.Today;
        	CodigoTB.KeyPress += new KeyPressEventHandler(Utils.SoloNumerosTB);
        }
        
        public void inicializarCombos(){
        	this.listaSexos = new List<BESexo>();
        	this.listaSexos.Add(new BESexo(-1,"<Seleccionar>"));
        	this.listaSexos.Add(new BESexo(1,"HEMBRA"));
        	this.listaSexos.Add(new BESexo(2,"MACHO"));        	
        	this.GeneroCB.DataSource = listaSexos;
        	this.GeneroCB.ValueMember = "idSexo";
        	this.GeneroCB.DisplayMember = "descripcion";
        	        	                	
        	BLEspecie blEspecie = new BLEspecie();        	
        	this.listaEspecies = blEspecie.obtenerEspeciesMascotas();        	
        	this.EspecieCB.DataSource = listaEspecies;
        	this.EspecieCB.ValueMember = "idEspecie";
        	this.EspecieCB.DisplayMember = "descripcion"; 
        }

        private void NuevoBTN_Click(object sender, EventArgs e)
        {

        }

        private void BuscarBTN_Click(object sender, EventArgs e)
        {
        	try{
	        	MascotasDGV.Rows.Clear();  
	        	
	        	if(CodigoTB.Text.Equals("") &&
	        	   NombreTB.Text.Equals("") &&
	        	   Convert.ToInt16(GeneroCB.SelectedValue) == -1 &&
	        	   Convert.ToInt16(EspecieCB.SelectedValue) == -1 &&
	        	   (Convert.ToInt16(RazaCB.SelectedValue) == -1 || RazaCB.Text == "") &&
	        	   fechaIniDTP.Value.Date == fechaFinDTP.Value.Date &&
	        	   ClienteTB.Text.Equals("")) { // búsqueda total
	        		
	        		//MessageBox.Show("busqueda total");        		        	
	        		
	        		BLMascota blmascota = new BLMascota();
	        		
	        		switch(tipoVentana){
	        			case 2: 
	        				listaMascotas = blmascota.obtenerListaMascotasBuscaPareja();
	        				break;
	        			case 3:
	        				listaMascotas = blmascota.obtenerListaMascotasAdopcion();
	        				break;
	        			default:
	        				listaMascotas = new List<BEMascota>();
	        				break;
	        		}
	        		        		 
					String genero = "";
	        		
	        		foreach(BEMascota mascota in listaMascotas){				    				    			
		    			
		    			if(mascota.Genero == 'M')
		    				genero = "MACHO";
		    			else if(mascota.Genero == 'H')
		    				genero = "HEMBRA";
		    			
						String[] fila = new String[]{
		    				false.ToString(),
							mascota.Id.ToString(),
							mascota.Nombre,		
							genero,							
							mascota.BeRaza.BeEspecie.Descripcion,
							mascota.BeRaza.Descripcion,									
							mascota.FechaNacimiento.ToShortDateString(),
							mascota.Dueno.Nombre + " " + mascota.Dueno.ApellidoPaterno
						};
						MascotasDGV.Rows.Add(fila);				
					}        			        				
	        		
		    		actualizarCantidadResultados(listaMascotas.Count);
	        		
	        	}else{ // búsqueda parcial
	        		BEMascota beMascota = new BEMascota();
	        		
	        		if(!CodigoTB.Text.Equals(""))
	        			beMascota.IdMascota = int.Parse(CodigoTB.Text);
	        		else
	        			beMascota.IdMascota = -1;
	        		
	        		beMascota.Nombre = NombreTB.Text;
	        		
	        		if(Convert.ToInt16(GeneroCB.SelectedValue) == 1)
	        			beMascota.Genero = 'H';
	        		else if(Convert.ToInt16(GeneroCB.SelectedValue) == 2)
	        			beMascota.Genero = 'M';
	        		else if(Convert.ToInt16(GeneroCB.SelectedValue) == -1)
	        			beMascota.Genero = '-';
	        		
	        		beMascota.BeRaza = new BERaza();
	        		
	        		if(RazaCB.SelectedValue != null && Convert.ToInt16(RazaCB.SelectedValue) != -1)
	        			beMascota.BeRaza.IdRaza = Convert.ToInt16(RazaCB.SelectedValue);	        			
	        		else
	        			beMascota.BeRaza.IdRaza = -1;
	        		
	        		beMascota.BeRaza.BeEspecie = new BEEspecie();
	        		
	        		if(Convert.ToInt16(EspecieCB.SelectedValue) != -1)
	        			beMascota.BeRaza.BeEspecie.IdEspecie = Convert.ToInt16(EspecieCB.SelectedValue);
	        		else
	        			beMascota.BeRaza.BeEspecie.IdEspecie = -1;
	        		
	        		if(clienteSeleccionado != null)
	        			beMascota.Dueno = clienteSeleccionado;
	        		
	        		BLMascota blmascota = new BLMascota();
	        		
	        		switch(tipoVentana){
	        			case 1: 
	        				listaMascotas = new List<BEMascota>();
	        				break;
	        			case 2: 
	        				listaMascotas = blmascota.obtenerListaMascotasBuscaPareja(beMascota,fechaIniDTP.Value,fechaFinDTP.Value);
	        				//listaMascotas = new List<BEMascota>();
	        				break;
	        			case 3:
	        				listaMascotas = blmascota.obtenerListaMascotasAdopcion(beMascota,fechaIniDTP.Value,fechaFinDTP.Value);
	        				//listaMascotas = new List<BEMascota>();
	        				break;
	        			default:
	        				listaMascotas = new List<BEMascota>();
	        				break;	        				
	        		}
	        		
	        		String genero = "";
	        		
	        		foreach(BEMascota mascota in listaMascotas){				    				    			
		    			
		    			if(mascota.Genero == 'M')
		    				genero = "MACHO";
		    			else if(mascota.Genero == 'H')
		    				genero = "HEMBRA";
		    			
						String[] fila = new String[]{
		    				false.ToString(),
							mascota.Id.ToString(),
							mascota.Nombre,		
							genero,							
							mascota.BeRaza.BeEspecie.Descripcion,
							mascota.BeRaza.Descripcion,									
							mascota.FechaNacimiento.ToShortDateString(),
							mascota.Dueno.Nombre + " " + mascota.Dueno.ApellidoPaterno
						};
						MascotasDGV.Rows.Add(fila);				
					}        			        				
	        		
		    		actualizarCantidadResultados(listaMascotas.Count);
	        		
	        	}
	        	
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }

        public void actualizarCantidadResultados(int i){
        	try{
        		CantidadResultaLBL.Text = "Cantidad de Mascotas encontradas: "+i;
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
        
        void CancelarBTNClick(object sender, EventArgs e)
        {
        	try{
    			if(Utils.MessagePregunta("¿Está seguro que desea cancelar esta acción?"))
        			this.Dispose();
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
        
        void AceptarBTNClick(object sender, EventArgs e)
        {
        	try{
	        	int cont = 0;
				int aux = 0;
				int pos = 0;
				
				foreach (DataGridViewRow fila in MascotasDGV.Rows)
				{
					if (fila.Cells[0].Value != null && Convert.ToBoolean(fila.Cells[0].Value))
					{
						cont++;
						pos = aux;
					}
					aux++;
				}
				
				if (cont == 0)
				{
					Utils.MessageAviso("Seleccione un cliente");	
				}
				else if (cont == 1)
				{								
					DataGridViewRow fila = MascotasDGV.Rows[pos];
					if (fila.Cells[0].Value != null && Convert.ToBoolean(fila.Cells[0].Value))
					{					
						this.mascotaSeleccionada = listaMascotas[pos];
						//MessageBox.Show(clienteSeleccionado.Nombre);
						this.Dispose();
					}
				}
				else if (cont > 1)
				{
					Utils.MessageAviso("Seleccione solo un cliente");		
				}
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        	
        }
        
        void LimpiarBTNClick(object sender, EventArgs e)
        {
        	try{
	        	CodigoTB.Text = "";
	        	NombreTB.Text = "";
        		GeneroCB.SelectedValue = -1;
	        	EspecieCB.SelectedValue = -1;
	        	RazaCB.SelectedValue = -1;
	        	fechaIniDTP.Value = DateTime.Today;
	        	fechaFinDTP.Value = DateTime.Today;
	        	ClienteTB.Text = "";
				mascotaSeleccionada = null;
				clienteSeleccionado = null;				
	        	MascotasDGV.Rows.Clear();
	        	if(listaMascotas != null)
	        		listaMascotas.Clear();        	
	        	SeleccionarDeseleccionarCHB.Checked = false;
	        	actualizarCantidadResultados(0);
        	}catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }
        
        void EspecieCBSelectedIndexChanged(object sender, EventArgs e)
        {
        	try{
	        	if(Convert.ToInt16(EspecieCB.SelectedValue) == -1) {
	        		RazaCB.Enabled = false;        		
	        	}else{        		
	        		RazaCB.Enabled = true;
		        	
		        	BEEspecie beEspecie = new BEEspecie();
		        	beEspecie.IdEspecie = Convert.ToInt16(EspecieCB.SelectedValue);
		        	beEspecie.Descripcion = EspecieCB.Text;
		        	
		        	BLRaza blRaza = new BLRaza();
		        	this.listaRazas = new List<BERaza>();
		        	this.listaRazas = blRaza.obtenerRazasMascotas(beEspecie);
		        	RazaCB.DataSource = listaRazas;
					RazaCB.ValueMember = "idRaza";
					RazaCB.DisplayMember = "descripcion";			
	        	}
        	}catch(Exception ex){
        		//Utils.MessageError("",ex);
        	}
        }
        
        void VerBTNClick(object sender, EventArgs e)
        {
        	try{
        	
				int cont = 0;
				int aux = 0;
				int pos = 0;
				
				foreach (DataGridViewRow fila in MascotasDGV.Rows)
				{
					if (fila.Cells[0].Value != null && Convert.ToBoolean(fila.Cells[0].Value))
					{
						cont++;
						pos = aux;
					}
					aux++;
				}
				
				if (cont == 0)
				{
					Utils.MessageAviso("Seleccione un cliente");
				}
				else if (cont == 1)
				{				
					DataGridViewRow fila = MascotasDGV.Rows[pos];
					
					if (fila.Cells[0].Value != null && Convert.ToBoolean(fila.Cells[0].Value))
					{
						GUIMascota v = new GUIMascota(listaMascotas[pos],listaMascotas[pos].Dueno,1);												
						v.ShowDialog(this);					
					}
				}
				else if (cont > 1)
				{
					Utils.MessageAviso("Seleccione sólo un cliente");		
				}
				
		    	}
        	catch(Exception ex){
        		Utils.MessageError("",ex);
        	}
        }

        
        void CheckBox1CheckedChanged(object sender, EventArgs e)
        {
        	try{
	        	if(listaMascotas != null && listaMascotas.Count != 0){
	        		
		        	if(SeleccionarDeseleccionarCHB.Checked)	        			        	
						foreach (DataGridViewRow fila in MascotasDGV.Rows)
							fila.Cells[0].Value = true;						        			        
		        	
		        	if(!SeleccionarDeseleccionarCHB.Checked)	        			        	
		        		foreach (DataGridViewRow fila in MascotasDGV.Rows)					
							fila.Cells[0].Value = false;	
	        	}
        	}catch(Exception ex){
        		//Utils.MessageError("",ex);
        	}
        }        
        
        void MascotasDGVCellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
        	try{        		        
	        	if(Convert.ToBoolean(MascotasDGV.Rows[e.RowIndex].Cells[0].Value))
	        		MascotasDGV.Rows[e.RowIndex].Cells[0].Value = false;
	        	else
	        		MascotasDGV.Rows[e.RowIndex].Cells[0].Value = true;	        	
        	}catch(Exception ex){
        		//Utils.MessageError("",ex);
        	}
        }
        
        void BuscarClienteBTNClick(object sender, EventArgs e)
        {
        	try{
		    	GUIMantenimientoCliente v = new GUIMantenimientoCliente(1);
		    	v.ShowDialog();
		    	clienteSeleccionado = v.ClienteSeleccionado;
		    	try{
	        		ClienteTB.Text = clienteSeleccionado.Nombre + " " + 
				        			 clienteSeleccionado.ApellidoPaterno + " " + 
				        			 clienteSeleccionado.ApellidoMaterno;
		    	}catch{
		    		
		    	}
        	}catch(Exception ex){
        		//Utils.MessageError("",ex);
        	}        	
        }
        
        
        void FechaIniDTPValueChanged(object sender, EventArgs e)
        {
        	if(DateTime.Compare(fechaIniDTP.Value,fechaFinDTP.Value) > 0)
        		fechaFinDTP.Value = fechaIniDTP.Value;
        }
    }
}
